// pages/play/play.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    id:'',
    playFlag: true,//进入放歌
    songName:'',
    singer:'',
    picUrl:'',
    duration: 0,//歌曲总时长
    allTime: '00:00', //歌曲总时长 分秒形式
    currentTime:0,
    nowTime:'00:00',
    lyricTextArr:[],//歌词数组
    lyricTimeArr:[],
    lyricIndex:0,//展示歌词下标
    songIndex: 0,
    songIdList:[],
    stateFlag:0,//歌曲循环播放标识 0 列表循环 1随机播放 2单曲循环
    listFlag:false,
    songList:[]
  },

  play:function(e){
    var id = e.currentTarget.dataset.id
    var songIdList = this.data.songIdList
    var index = songIdList.indexOf(id)
    this.setData({
      id: id,
      songIndex: index,
      playFlag: true
    })
    this.music.play()
    this.getLyric()
    wx.request({
      url: 'http://127.0.0.1:3000/song/detail?ids=' + id,
      success:(res) => {
        // console.log(res.data)
        //获取歌名
        var songName = res.data.songs[0].name
        //获取歌手
        var singer = res.data.songs[0].ar[0].name
        //获取专辑图
        var pic = res.data.songs[0].al.picUrl
        //获取歌曲时长（毫秒）
        var dt = res.data.songs[0].dt
        //时间转换
        dt = Math.floor(dt / 1000)
        //获取分钟数
        var fen = Math.floor(dt / 60)
        fen = fen >= 10 ? fen : '0' + fen
        //不足一分钟的秒数
        var miao = dt % 60
        miao = miao >= 10 ? miao : '0' + miao
        var timeStr = fen + ':' + miao
        this.setData({
          songName:songName,
          singer:singer,
          picUrl:pic,
          duration:dt,
          allTime:timeStr,
        })
      }
    })
  },

  del:function(e){
    var index = e.currentTarget.dataset.index
    var songList = this.data.songList
    var songIdList = this.data.songIdList
    //splice(a,b) 删除数组中的元素 a下标  b删除个数 
    songList.splice(index,1)
    songIdList.splice(index,1)
    var id = this.data.id * 1
    var songIndex = songIdList.indexOf(id)
    this.setData({
      songList:songList,
      songIdList:songIdList,
      songIndex:songIndex
    })
  },

  showList:function(){
    this.setData({
      listFlag:!this.data.listFlag
    })
  },

  stateChange: function () {
    var state = this.data.stateFlag
    if(state == 2){
      state = 0
    }else{
      state ++
    }
    this.setData({
      stateFlag: state
    })
  },

  music:'',

  
  //跳转播放 按钮
  playMusic:function() {
    if(this.data.playFlag){
      //如果音乐播放点击后暂停
      this.music.pause()
    }else{
      this.music.play()
    }
    this.setData({
      //把标识设置为自身的相反值
      playFlag:!this.data.playFlag
    })
  },

  //VIP 歌曲无法播放
  error:function() {
    wx.showToast({
      title: 'VIP歌曲',
      icon:'error',
      duration: 2000
    })
    //延时器 等待时间 执行回调函数
    //函数形式：普通函数funcation(){}
    //         箭头函数（）=》 {}
    //箭头函数不会产生this关键字  也就是在这个函数中 可以this.别的函数
    var that = this
    setTimeout(() => {
      that.nextMusic()
    },2000)
  },

  //获取歌曲信息
  getData:function(){
    var id = this.data.id * 1
    wx.request({
      url: 'http://127.0.0.1:3000/song/detail?ids=' + id,
      success:(res) => {
        // console.log(res.data)
        //获取歌名
        var songName = res.data.songs[0].name
        //获取歌手
        var singer = res.data.songs[0].ar[0].name
        //获取专辑图
        var pic = res.data.songs[0].al.picUrl
        //获取歌曲时长（毫秒）
        var dt = res.data.songs[0].dt
        //时间转换
        dt = Math.floor(dt / 1000)
        //获取分钟数
        var fen = Math.floor(dt / 60)
        fen = fen >= 10 ? fen : '0' + fen
        //不足一分钟的秒数
        var miao = dt % 60
        miao = miao >= 10 ? miao : '0' + miao
        var timeStr = fen + ':' + miao
        this.setData({
          songName:songName,
          singer:singer,
          picUrl:pic,
          duration:dt,
          allTime:timeStr,
          
        })
      }
    })
    //判断搜索关键词是否存在
    if(this.data.keyword){
      wx.request({
        url: 'http://127.0.0.1:3000/search?keywords='  + this.data.keyword,
        success:(res) => {
          var songList = res.data.result.songs
          var songIdList = []
          for(let i = 0 ; i < songList.length; i++){
            songIdList.push(songList[i].id)
          }
          setTimeout(()=>{
            var songIndex = songIdList.indexOf(id)
            this.setData({
              songIdList: songIdList,
              songIndex: songIndex,
              songList: songList,
            })
          },200)
        }
      })
    }
    //列表id是否存在
    if(this.data.listId){
      wx.request({
        url: 'http://127.0.0.1:3000/playlist/track/all?id=' + this.data.listId,
        success:(res) =>{
          var songList = res.data.songs
          var songIdList = []
          for(let i = 0; i < songList.length; i++){
            songIdList.push(songList[i].id)
          }
          setTimeout(() => {
            // 播放歌曲下标
            var songIndex = songIdList.indexOf(id)
            this.setData({
              songIdList: songIdList,
              songIndex: songIndex,
              songList:songList
            })
          }, 200)
        }
      })
    }
  },

  //更改进度条
  sliderChange: function (e) {
    var value = e.detail.value
    // 更改音乐播放进度
    this.music.seek(value)
  },

  //快进快退 跟歌词对应
  timeUp:function (e) {
    // console.log(e.detail)
    var currentTime = e.detail.currentTime 
    var timeArr = this.data.lyricTimeArr
    // console.log(timeArr)
    // 歌词和时间对应关系： 第n句歌词出现的时间： n~n+1的时间段
    // 判断中需要判断currentTime和n，n+1歌词时间的关系
    for(let i = 0; i < timeArr.length - 1; i++){
      var start = timeArr[i]
      var end = timeArr[i + 1]
      if(currentTime >= start && currentTime < end){
        // lyricIndex 展示歌词的下标
        this.setData({
          lyricIndex: i
        })
        // return
      }
    }
    currentTime = Math.floor(currentTime)
    var fen = Math.floor(currentTime / 60)
    fen = fen >= 10 ? fen : '0' + fen
    var miao = currentTime % 60
    miao = miao >= 10 ? miao : '0' + miao
    var timeStr = fen + ':' + miao
    this.setData({
      currentTime:e.detail.currentTime,
      nowTime:timeStr
    })
  },

  //获取歌词
  getLyric:function () {
    var id = this.data.id
    wx.request({
      url: 'http://127.0.0.1:3000/lyric?id=' + id,
      success:(res) =>{
        // console.log(res.data)
        var lyricStr = res.data.lrc.lyric
        // 1.split()分隔字符串，以换行符\n分隔
        var lyricArr = lyricStr.split('\n')
        // console.log(lyricArr)
        // 2.判断数组中最后一个元素是否为空字符串，如果为空，则删除最后一个元素
        if(lyricArr[lyricArr.length - 1] == ''){
          lyricArr.pop()
        }
        // 3.遍历数组
        // 声明一个正则表达式，用来匹配时间格式[00:00.000]
        var part = /\[\d{1,2}:\d{1,2}\.\d{1,3}\]/
        var arr = [] // 存歌词
        var timeArr = [] // 存歌词对应的时间
        lyricArr.forEach(item => {
          // 把数组中每一个元素里的时间内容去除掉，只保留文本部分返回出来
          var lyric = item.replace(part, '')
          // console.log(lyric)
          // 把符合正则表达式的时间提取出来[00:00.000]
          var lytime = item.match(part)[0] 
          // slice() 截取[00:00.000]中时间内容
          lytime = lytime.slice(1, -1)
          // 把分秒形式的时间转为纯秒数
          var lytimeArr = lytime.split(':')
          var time = lytimeArr[0] * 60 + lytimeArr[1] * 1
          arr.push(lyric)
          timeArr.push(time)
        })
        this.setData({
          lyricTextArr: arr,
          lyricTimeArr: timeArr
        })
      }
    })
  },

  nextMusic: function () {
    var songIndex = this.data.songIndex
    var idList = this.data.songIdList
    if(this.data.stateFlag == 1){
      // 随机播放下一首
      // Math.random()生成[0, 1)之间的随机数
      var num = Math.random() * idList.length
      num = Math.floor(num)
      if(num == songIndex){
        if(num == idList.length - 1){
          num = 0
        }else{
          num ++
        }
      }
      songIndex = num
    }else{
      // 循环播放下一首
      if(songIndex == idList.length - 1){
        songIndex = 0
      }else{
        songIndex ++
      }
    }
    this.setData({
      songIndex: songIndex,
      id: idList[songIndex],
      playFlag: true
    })
    this.getData()
    this.getLyric()
    this.music.play()
  },

  prevMusic: function () {
    var songIndex = this.data.songIndex
    var idList = this.data.songIdList
    if(songIndex == 0){
      songIndex = idList.length - 1
    }else{
      songIndex --
    }
    this.setData({
      songIndex: songIndex,
      id: idList[songIndex],
      playFlag: true
    })
    this.getData()
    this.getLyric()
    this.music.play()
  },
  
  end: function () {
    if(this.data.stateFlag == 2){
      // 单曲循环
      this.music.play()
    }else{
      this.nextMusic()
    }
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.music = wx.createAudioContext('music')
    var id = options.id
    var keyword = options.keyword
    var listId = options.listId
    // var id = options.id ? options.id : 569200213
    // var keyword = options.keyword ? options.keyword:'毛不易'
    this.setData({
      id:id,
      keyword:keyword,
      listId:listId
    })
    this.music.play()
    this.getData()
    this.getLyric()
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})